/**
 * 门店房间数据组件
 * 
 * 用途：管理和显示门店房间信息，支持数据获取和展示
 * 方法：使用Jetpack Compose构建数据展示UI，集成API数据获取
 * 原理：
 * - 提供门店和房间数据结构定义
 * - 集成API数据获取功能
 * - 支持数据缓存和状态管理
 * - 提供数据生成器，用于测试和演示
 */

package com.example.brain_wave.ui.components

/**
 * 门店数据类
 */
data class Store(
    val id: Int,                    // 门店ID
    val name: String,               // 门店名称
    val province_id_text: String = "",  // 省份ID文本
    val isActive: Boolean = true    // 是否激活
)

/**
 * 房间数据类
 */
data class Room(
    val id: Int,                    // 房间ID（用于设备连接）
    val name: String,               // 房间名称
    val store_id: Int,              // 所属门店ID
    val roomType: RoomType = RoomType.SINGLE,         // 房间类型
    val capacity: Int = 1,              // 房间容量
    val isAvailable: Boolean = true // 是否可用
)

/**
 * 房间类型枚举
 */
enum class RoomType(
    val displayName: String,
    val description: String
) {
    SINGLE("单人间", "适合单人使用的睡眠监测房间"),
    DOUBLE("双人间", "适合双人使用的睡眠监测房间"),
    FAMILY("家庭间", "适合家庭使用的大型睡眠监测房间"),
    VIP("VIP间", "高端VIP睡眠监测房间")
}

/**
 * 设备连接状态枚举
 */
enum class DeviceConnectionStatus(
    val displayName: String,
    val description: String
) {
    DISCONNECTED("未连接", "设备未连接"),
    CONNECTING("连接中", "正在连接设备"),
    CONNECTED("已连接", "设备已成功连接"),
    ERROR("连接错误", "设备连接出现错误")
}

/**
 * 信号质量等级枚举
 */
enum class SignalQualityLevel(
    val displayName: String,
    val range: IntRange,
    val color: androidx.compose.ui.graphics.Color
) {
    EXCELLENT("优秀", 0..50, androidx.compose.ui.graphics.Color(0xFF4CAF50)),      // 绿色
    GOOD("良好", 51..100, androidx.compose.ui.graphics.Color(0xFF8BC34A)),         // 浅绿色
    FAIR("一般", 101..150, androidx.compose.ui.graphics.Color(0xFFFF9800)),        // 橙色
    POOR("较差", 151..200, androidx.compose.ui.graphics.Color(0xFFF44336))         // 红色
}

/**
 * 睡眠状态统计数据
 */
data class SleepStateStatistics(
    val totalDurationMs: Long = 0L,                    // 总持续时长（毫秒）
    val awakeDurationMs: Long = 0L,                    // 清醒状态持续时长
    val drowsyDurationMs: Long = 0L,                   // 困倦状态持续时长 (N1)
    val lightSleepDurationMs: Long = 0L,               // 浅睡眠持续时长 (N2)
    val deepSleepDurationMs: Long = 0L,                // 深睡眠持续时长 (N3)
    val remSleepDurationMs: Long = 0L,                 // 眼动睡眠持续时长 (REM)
    val currentState: UserState = UserState.AWAKE,    // 当前睡眠状态
    val signalQuality: Int = 0                         // 当前信号质量 (0-200)
) {
    /**
     * 格式化时长为 HH时MM分SS秒
     */
    fun formatDuration(durationMs: Long): String {
        val totalSeconds = durationMs / 1000
        val hours = totalSeconds / 3600
        val minutes = (totalSeconds % 3600) / 60
        val seconds = totalSeconds % 60
        return "${hours.toString().padStart(2, '0')}时${minutes.toString().padStart(2, '0')}分${seconds.toString().padStart(2, '0')}秒"
    }
    
    /**
     * 获取总时长格式化字符串
     */
    fun getTotalDurationFormatted(): String = formatDuration(totalDurationMs)
    
    /**
     * 获取清醒时长格式化字符串
     */
    fun getAwakeDurationFormatted(): String = formatDuration(awakeDurationMs)
    
    /**
     * 获取困倦状态时长格式化字符串
     */
    fun getDrowsyDurationFormatted(): String = formatDuration(drowsyDurationMs)
    
    /**
     * 获取浅睡眠时长格式化字符串
     */
    fun getLightSleepDurationFormatted(): String = formatDuration(lightSleepDurationMs)
    
    /**
     * 获取深睡眠时长格式化字符串
     */
    fun getDeepSleepDurationFormatted(): String = formatDuration(deepSleepDurationMs)
    
    /**
     * 获取眼动睡眠时长格式化字符串
     */
    fun getRemSleepDurationFormatted(): String = formatDuration(remSleepDurationMs)
    
    /**
     * 获取信号质量等级
     */
    fun getSignalQualityLevel(): SignalQualityLevel {
        return SignalQualityLevel.values().find { signalQuality in it.range } 
            ?: SignalQualityLevel.POOR
    }
}

/**
 * 门店房间数据管理器
 * 用于获取门店和房间数据，支持API和测试数据
 */
class StoreRoomDataManager(private val context: android.content.Context) {
    
    private val apiService = com.example.brain_wave.api.service.StoreRoomApiService(context)
    
    /**
     * 获取门店列表
     */
    suspend fun getStores(): List<Store> {
        println("🔄 StoreRoomDataManager: 开始获取门店列表")
        val result = apiService.getStores()
        
        if (result.isSuccess) {
            val apiStores = result.getOrNull() ?: emptyList()
            println("✅ StoreRoomDataManager: API返回门店数量: ${apiStores.size}")
            
            val stores = apiStores.map { apiStore ->
                println("🔄 转换门店数据: API门店 ID=${apiStore.id}, 名称=${apiStore.name}, 省份=${apiStore.province_id_text}")
                Store(
                    id = apiStore.id,
                    name = apiStore.name,
                    province_id_text = apiStore.province_id_text
                )
            }
            
            println("✅ StoreRoomDataManager: 转换完成，最终门店数量: ${stores.size}")
            stores.forEach { store ->
                println("🏪 最终门店数据: ID=${store.id}, 名称=${store.name}, 省份=${store.province_id_text}")
            }
            
            return stores
        } else {
            val error = result.exceptionOrNull()
            println("❌ StoreRoomDataManager: 获取门店列表失败: ${error?.message}")
            return emptyList()
        }
    }
    
    /**
     * 根据门店ID获取房间列表
     */
    suspend fun getRoomsByStoreId(storeId: Int): List<Room> {
        println("🔄 StoreRoomDataManager: 开始获取门店ID=$storeId 的房间列表")
        val result = apiService.getRooms(storeId)
        
        if (result.isSuccess) {
            val apiRooms = result.getOrNull() ?: emptyList()
            println("✅ StoreRoomDataManager: API返回房间数量: ${apiRooms.size}")
            
            val rooms = apiRooms.map { apiRoom ->
                println("🔄 转换房间数据: API房间 ID=${apiRoom.id}, 名称=${apiRoom.name}, 门店ID=${apiRoom.store_id}")
                Room(
                    id = apiRoom.id,
                    name = apiRoom.name,
                    store_id = apiRoom.store_id
                )
            }
            
            println("✅ StoreRoomDataManager: 转换完成，最终房间数量: ${rooms.size}")
            rooms.forEach { room ->
                println("🏠 最终房间数据: ID=${room.id}, 名称=${room.name}, 门店ID=${room.store_id}")
            }
            
            return rooms
        } else {
            val error = result.exceptionOrNull()
            println("❌ StoreRoomDataManager: 获取房间列表失败: ${error?.message}")
            return emptyList()
        }
    }
    
    /**
     * 根据房间ID获取房间信息
     */
    suspend fun getRoomById(roomId: Int): Room? {
        // 这里需要遍历所有门店的房间来查找
        val stores = getStores()
        for (store in stores) {
            val rooms = getRoomsByStoreId(store.id)
            val room = rooms.find { it.id == roomId }
            if (room != null) return room
        }
        return null
    }
}

/**
 * 工具类，提供静态方法
 */
object StoreRoomUtils {
    /**
     * 生成随机信号质量值 (0-200)
     */
    fun generateRandomSignalQuality(): Int {
        return kotlin.random.Random.nextInt(0, 201)
    }
}